Reliable data transmission is used when two entities (such as two computers) communicate and it is essential that all data goes correctly from the transmitter to the receiver. Data are usually sent as packets, with an extra bit of data added which permits verification that the data packet has been received correctly. Using such techniques, the receiver is certain that it has received all the data correctly, and the transmitter is aware that the receiver has correctly received all the data, even in the presence of communication errors and dropout.
Typical communication channels are radio communication, Ethernet or underwater acoustic communication. Some reliable data transmission techniques are designed for half-duplex communication when using the same frequency for both transmitting and receiving. In half-duplex communication the sending station transmits a packet, turns off the transmitter, and waits to receive data from the receiving station. A typical protocol for reliable data transmission is Automatic ReQuest (ARQ). The sending station prepares a packet of data, and appends a verification piece, such as a checksum or cyclic redundancy check (CRC). This packet is sent. The receiving station receives the packet, checks the integrity of the data. If the data are correct, the receiving station transmits an acknowledgment (ACK). If the data are incorrect, the receiving station transmits a negative acknowledgment (NAK). The sending station waits for the ACK/NAK. If it receives an ACK, the sender proceeds to the next packet. If the sender receives a NAK, it retransmits the packet. After a predetermined wait time, if the sender detects no response at all, it assumes a NAK was sent, and resends the packet. See U.S. Pat. No. 8,458,548 incorporated herein by this reference.